package com.atguigu.boot;

import ch.qos.logback.core.db.DBHelper;
import com.atguigu.boot.bean.Pet;
import com.atguigu.boot.bean.User;
import com.atguigu.boot.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @author 黄石杨  on 2022/3/8
 * @version 1.0
 */

@SpringBootApplication    //这一个注解顶下面三个注解

//@SpringBootConfiguration
//@EnableAutoConfiguration
//@ComponentScan("com.atguigu")
public class MainApplication {
    public static void main(String[] args) {
        //1、返回我们IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
        //2、查看容器里面的组件
        String[] names = run.getBeanDefinitionNames();

        for(String name:names){
            System.out.println(name);
        }

//        System.out.println("============");
//        Pet tom01 = run.getBean("tom",Pet.class);
//        Pet tom02 = run.getBean("tom",Pet.class);
//        System.out.println("组件："+(tom01 == tom02));
//        //4、com.atguigu.boot.config.MyConfig$$EnhancerBySpringCGLIB$$98538cff@2a331b46
//        MyConfig bean = run.getBean(MyConfig.class);
//        System.out.println(bean);
//
//        //如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中代理
//        //保持组件单实例
//        User user = bean.user01();
//        User user1 = bean.user01();
//        System.out.println(user == user1);
//
//        User user01 = run.getBean("user01",User.class);
//        Pet tom = run.getBean("tom",Pet.class);
//
//        System.out.println("用户的宠物："+(user01.getPet() == tom));

//        //5.获取组件
//        String[] beanNamesForType = run.getBeanNamesForType(User.class);
//        System.out.println("==================");
//        for(String s:beanNamesForType){
//            System.out.println(s);
//        }
//
//        DBHelper bean1 = run.getBean(DBHelper.class);
//        System.out.println(bean1);

        boolean tom = run.containsBean("tom");
        System.out.println("容器中Tom组件："+tom);

        boolean user01 = run.containsBean("user01");
        System.out.println("user:"+user01);


    }
}


















